package cho114366.basic;

import java.util.Scanner;

public class J20_BookDBMain {
	// 서비스 클래스, 키보드 입력 클래스는
	// 객체 생성없이 바로 사용할 수 있도록
	// Static 으로 선언
	private static J20_BookDBDAO srv = new J20_BookDBDAO(); // 생성자 생성 임플리먼트 클래스

	// 스캐너(입력메서드 호출) 선언
	private static Scanner sc = new Scanner(System.in);

	// private를 선언하여 스태틱이라도 이 클래스에서만 사용할 수 있다.
	private static final String TITLE = "-=bookdb 프로그램=-";
	private static final String MENU = "(1) 추가 (2) 전체조회 (3) 상세조회 (4) 수정 (5) 종료(0)";
	private static final String ADDMSG = "제목, 출판사, 저자 순으로 입력";
	private static final String VIEW = "상세 조회할 책번호를 입력";
	private static final String DELMSG = "삭제할 책번호를 입력하세요";
	private static final String UPDMSG = "수정할 조회할 책번호를 입력";

	public static void main(String[] args) {
		// 메인 실행문장 완성 유저가 볼수 있는 화면
		System.out.println(TITLE);
		while (true) {
			System.out.println(MENU);
			switch (sc.nextInt()) {
			case 1:
				newBookDB(sc, srv);
				break;
			case 2:
				readBookDB(sc, srv);
				break;
			case 3:
				readOneBookDB(sc, srv);
				break;
			case 4:
				modifyBookDB(sc, srv);
				break;
			case 5:
				removeBookDB(sc, srv);
				break;
			case 0:
				sc.close();
				System.exit(0);
				break;

			}

		}

	} // 메인 클래스에서 DAO클래스의 메서드를
		// 직접 호출하는 것은 OOP 개념에 다소 위배

	// 캡슐화 보안, 유지보수 관점에서 볼때
	// 서비스 객체를 하나 더 만들어 DAO클래스의 메서드를
	// 호출하는 것이 더 나음
	// 즉, Main -> DAO 보다는
	// Main -> service -> DAO 가 나음
	// DAO의 메서드를 호출하는
	// 서비스 메서드를 static으로 선언
	private static void newBookDB(Scanner sc, J20_BookDBDAO srv) {
		// 메서드에 인자값 무조건으로 넣어주기~~~~~~~~~~~~~
		System.out.println(ADDMSG); // 추가메세지 출력

		J20_BookDBVO bb = new J20_BookDBVO(sc.next(), sc.next(), sc.next()); // 필드값
																				// 스캐너로
		// 입력
		int cnt = srv.insertBookDB(bb); // 입력된지 여부 카운트 변수생성
		if (cnt > 0)
			System.out.println("추가성공!");// 입력되면 출력화면 구성
	}

	private static void readBookDB(Scanner sc, J20_BookDBDAO srv) {
		System.out.println(srv.selectBookDB());
	}

	private static void readOneBookDB(Scanner sc, J20_BookDBDAO srv) {
		System.out.println(srv.selectBookDB());
		System.out.println(VIEW);
		String id = sc.next();
		System.out.println(srv.selectBookDBbyTitle(id));
	}

	private static void modifyBookDB(Scanner sc, J20_BookDBDAO srv) {
		System.out.println((srv.selectBookDB()));
		System.out.println((UPDMSG));
		String id = sc.next();
		System.out.println(ADDMSG);
		J20_BookDBVO b = new J20_BookDBVO(sc.next(), sc.next(), sc.next());
		b.setId(sc.next());
		if (srv.updateBookdb(b) > 0)
			System.out.println("수정완료");

		srv.updateBookdb(null);
	}

	private static void removeBookDB(Scanner sc, J20_BookDBDAO srv) {
		System.out.println(srv.selectBookDB());
		System.out.println(DELMSG);
		String id = sc.next();
		if (srv.deleteBookDB(id) > 0)

			System.out.println(srv.deleteBookDB("수정완료"));
	}

}
